إدارة العمليات (Process) في لينكس باستخدام الطرفية
تُعد إدارة العمليات في نظام لينكس من المهام الحيوية التي تمكّن المستخدمين والمشرفين من التحكم الكامل في كيفية تشغيل البرامج والعمليات المختلفة، سواء كانت هذه العمليات نشطة في الخلفية أو تعمل في واجهة المستخدم. تعد الطرفية (Terminal) الأداة الأساسية للتفاعل مع نظام التشغيل لينكس، ومن خلالها يمكن تنفيذ عمليات معقدة مثل مراقبة العمليات، إدارة أولوية تنفيذها، إيقافها، استئنافها، أو حتى قتلها نهائياً.
هذا المقال يستعرض بشكل شامل إدارة العمليات في لينكس باستخدام الطرفية، بدءًا من التعريف بالعمليات، مرورًا بالأدوات والأوامر الأساسية والمتقدمة المستخدمة في إدارة العمليات، وصولاً إلى تفاصيل دقيقة حول كيفية التعامل مع هذه العمليات بكفاءة عالية.
مفهوم العملية (Process) في نظام لينكس
العملية هي وحدة أساسية في نظام التشغيل، تمثل برنامجًا قيد التنفيذ. يمكن أن تكون العملية عبارة عن برنامج بسيط كملف نصي يتم تنفيذه أو تطبيق معقد متعدد الخيوط (threads). في لينكس، كل عملية تتمتع بمعرف فريد يسمى معرف العملية (Process ID – PID).
كل عملية في لينكس تمتلك حالة معينة يمكن أن تتغير خلال دورة حياتها، مثل:
-
Running (جارٍ التنفيذ): العملية تعمل حالياً على المعالج.
-
Sleeping (نائمة): العملية تنتظر حدثًا معينًا أو موردًا ليصبح متاحًا.
-
Stopped (متوقفة): العملية توقفت مؤقتًا عن التنفيذ.
-
Zombie (زومبي): عملية انتهت ولكنها لا تزال لها مدخل في جدول العمليات لأنها لم تُجمع بعد من قبل العملية الأم.
أدوات الطرفية لإدارة العمليات في لينكس
1. أمر ps
أمر ps (process status) هو أحد الأوامر الأساسية التي تُستخدم لعرض قائمة العمليات الجارية في النظام. يوفر معلومات حول PID، المستخدم الذي يملك العملية، استهلاك الموارد، حالة العملية، وغيرها.
مثال:
bashps aux
-
a: عرض العمليات لجميع المستخدمين. -
u: عرض العمليات مع تفاصيل المستخدم. -
x: عرض العمليات غير المرتبطة بطرفية.
توضيح الأعمدة في ناتج ps aux:
| العمود | الوصف |
|---|---|
| USER | اسم المستخدم الذي يملك العملية |
| PID | معرف العملية |
| %CPU | نسبة استخدام المعالج |
| %MEM | نسبة استخدام الذاكرة |
| VSZ | حجم الذاكرة الظاهرية (كيلوبايت) |
| RSS | حجم الذاكرة الفعلية (كيلوبايت) |
| TTY | الطرفية المرتبطة بالعملية |
| STAT | حالة العملية |
| START | وقت بدء العملية |
| TIME | الوقت الذي استغرقته العملية |
| COMMAND | الأمر الذي بدأ العملية |
2. أمر top
أمر top هو أداة تفاعلية تُظهر قائمة العمليات في الوقت الفعلي، مع تحديث مستمر لاستهلاك الموارد، مثل المعالج والذاكرة. يمكن من خلال top التحكم بالعمليات، مثل تغيير أولوية تنفيذها أو قتلها مباشرة.
بعض الأوامر داخل top:
-
P: ترتيب العمليات حسب استهلاك المعالج. -
M: ترتيب العمليات حسب استهلاك الذاكرة. -
k: قتل عملية عبر إدخال PID. -
r: تغيير أولوية عملية (renice).
3. أمر htop
أداة htop هي نسخة محسنة من top، توفر واجهة أكثر سهولة وتفاعلية، مع إمكانية التمرير، والبحث، والتصفية، وكذلك القدرة على قتل أو إيقاف العمليات بسهولة.
4. أمر kill
يستخدم أمر kill لإرسال إشارات إلى العمليات، عادةً لإيقافها أو قتلها. يرسل الأمر الإشارة إلى عملية معينة بواسطة PID.
التركيب الأساسي:
bashkill [signal] PID
-
إذا لم يُحدد الإشارة، يُرسل الإشارة الافتراضية
SIGTERM(15) التي تطلب من العملية الإنهاء بطريقة نظيفة. -
لإجبار عملية على الإنهاء الفوري، تستخدم إشارة
SIGKILL(9):
bashkill -9 PID
5. أمر killall
يشبه kill، لكن يتم استخدامه لقتل جميع العمليات التي تحمل اسمًا معينًا، دون الحاجة إلى معرفة الـ PID.
مثال:
bashkillall firefox
6. أمر pkill
يشبه killall لكنه أكثر مرونة، حيث يسمح بإرسال الإشارات للعمليات بناءً على أنماط نصية (regex) في أسماء العمليات.
7. أمر jobs
يعرض قائمة العمليات التي يتم تشغيلها في الخلفية من داخل الطرفية الحالية، مع تحديد أرقام الوظائف (jobs) الخاصة بها.
8. أمر fg و bg
-
fg: يُعيد تشغيل عملية من الخلفية إلى المقدمة (foreground). -
bg: يُعيد تشغيل عملية متوقفة أو معلقة في الخلفية.
9. أمر nice و renice
nice
يُستخدم لتشغيل عملية مع أولوية منخفضة أو مرتفعة (قيمة “nice” أعلى تعني أولوية أقل).
bashnice -n 10 command
-
القيمة الافتراضية للـ nice هي 0.
-
القيم تتراوح من -20 (أعلى أولوية) إلى 19 (أدنى أولوية).
renice
يستخدم لتغيير أولوية عملية قيد التنفيذ.
bashrenice -n 5 -p PID
فهم إشارات العمليات Signals في لينكس
الإشارات هي طريقة للتواصل مع العمليات، وتعبر عن أوامر أو تحذيرات معينة. منها:
| الإشارة | الرقم | الوصف |
|---|---|---|
| SIGHUP | 1 | إعادة تحميل الإعدادات |
| SIGINT | 2 | إيقاف العملية (Ctrl+C) |
| SIGQUIT | 3 | إيقاف العملية مع تفريغ |
| SIGKILL | 9 | قتل العملية فورًا |
| SIGTERM | 15 | طلب إنهاء نظيف |
| SIGSTOP | 19 | إيقاف العملية مؤقتًا |
| SIGCONT | 18 | استئناف عملية متوقفة |
إدارة العمليات في الخلفية (Background) والمقدمة (Foreground)
في الطرفية، العمليات يمكن تشغيلها في الخلفية أو المقدمة:
-
المقدمة (Foreground): حيث يتم التفاعل مع العملية مباشرة.
-
الخلفية (Background): حيث تستمر العملية بالعمل دون التداخل مع الطرفية، مما يسمح بتنفيذ أوامر أخرى.
تشغيل عملية في الخلفية
يتم ذلك بوضع & في نهاية الأمر:
bash./script.sh &
نقل عملية من المقدمة إلى الخلفية
يمكن استخدام مفتاح Ctrl + Z لإيقاف مؤقت لعملية، ثم:
bashbg
لتشغيلها في الخلفية.
التعامل مع العمليات المتوقفة والمعلقة
عندما يتم إيقاف عملية (مثل الضغط على Ctrl + Z)، تصبح معلقة. يمكن استئنافها في الخلفية أو المقدمة باستخدام bg و fg.
مراقبة الأداء باستخدام أدوات متقدمة
أمر pidstat
يوفر إحصائيات تفصيلية عن استهلاك كل عملية للمعالج والذاكرة.
مثال:
bashpidstat 1
يعرض تحديثًا كل ثانية.
أمر iotop
يعرض العمليات التي تستهلك الموارد على مستوى الإدخال/الإخراج (قراءة وكتابة الأقراص).
حالات خاصة في إدارة العمليات
العمليات اليتيمة (Orphan Processes)
هي العمليات التي فقدت العملية الأم التي أنشأتها، وتصبح في عهدة init أو systemd.
العمليات الزومبي (Zombie Processes)
هي العمليات التي انتهت ولكن لم يتم تنظيفها من جدول العمليات بعد. يمكن رؤيتها بحالة Z في ps.
جدول مقارنة بين بعض أوامر إدارة العمليات في لينكس
| الأمر | الوظيفة | الاستخدام الأساسي | ملاحظات |
|---|---|---|---|
| ps | عرض قائمة العمليات | ps aux |
عرض ثابت، غير تفاعلي |
| top | مراقبة العمليات بشكل تفاعلي | top |
تحديث مستمر، تحكم بالعمليات |
| htop | نسخة محسنة من top | htop |
واجهة أفضل، سهولة في الاستخدام |
| kill | إرسال إشارة لعملية | kill -9 PID |
قتل أو إيقاف العمليات |
| killall | قتل جميع العمليات باسم معين | killall process_name |
مفيد عند معرفة اسم العملية فقط |
| pkill | إرسال إشارة بناءً على نمط | pkill -f pattern |
أكثر مرونة من killall |
| jobs | عرض العمليات في الخلفية | jobs |
مخصص للجلسة الطرفية الحالية |
| fg | إرجاع عملية إلى المقدمة | fg %job_number |
التعامل مع عمليات الخلفية |
| bg | تشغيل عملية في الخلفية | bg %job_number |
مفيد عند إيقاف عملية مؤقتًا |
الخلاصة
إدارة العمليات باستخدام الطرفية في لينكس تمثل أحد الركائز الأساسية للتحكم في نظام التشغيل والتعامل مع البرامج قيد التنفيذ بكفاءة ومرونة. تمكن الأدوات والأوامر المتعددة المستخدمين من مراقبة استخدام الموارد، التحكم في أولويات تنفيذ العمليات، التعامل مع العمليات في الخلفية أو المقدمة، وإرسال إشارات للتحكم في سلوك العمليات.
مع معرفة عميقة بهذه الأدوات، يمكن تحقيق أداء محسّن للنظام، استقرار أكبر، وإدارة أفضل للمهام والخدمات. كما أن معرفة كيفية التعامل مع العمليات الزومبي واليتيمة يساهم في الحفاظ على نظافة النظام وكفاءته.
المصادر والمراجع
-
Linux man pages (صفحات المساعدة لأوامر ps، top، kill وغيرها).
-
كتاب “Linux System Programming” – Robert Love, الذي يتناول بالتفصيل إدارة العمليات والبرمجة على مستوى نظام التشغيل لينكس.

